import { menu } from '../declare/system/module';
import router from '../router'
import { findModules } from 'apis/system/module'
import store from '@/store';

/**
 * 构建动态路由
 * @param menus 通过接口获取的菜单模块列表
 * @param parentRouteName   父路由名称，如果存在，则当前添加的路由将会作为子路由存在
 */
export const dynamicRoute = (menus: Array<menu>|undefined, parentRouteName?: string) => {
    if(!menus || menus.length == 0) {
        // 无菜单模块
        return;
    }

    const modules = import.meta.glob('../views/**/*.vue');
    menus.forEach(item => {
        // 新增路由
        const newRoute = {
            path: item.path
            , name: item.name
            , component: modules['../views' + item.page]
            , meta: {
                displayName: item.displayName   
            }
        }
        if(parentRouteName) {
            router.addRoute(parentRouteName, newRoute);
        } else {
            router.addRoute(newRoute);
        }

        // 构建子路由模块
        dynamicRoute(item.children, item.name);
    })
}

/**
 *  判断是否需要重新构建动态路由
 *  如果需要重新构建，则调用请求构建菜单
 */
 export const buildDynamicRoute = async () => {
    if(store.getters.needToReloadMenus) {
        console.log('重新构建动态路由数据');
        
        const menus = await findModules();
        dynamicRoute(<Array<menu>> <unknown> menus);
        
        store.commit("LOAD_MENU", menus);
    }
}